package org.soc.timesheet.custom.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


/**
 * Questa annotation gestisce la scrittura dei log.
 * Se viene messa come annotation del tipo allora tutti i metodi senza annotation AOPLogger verranno loggati allo stesso modo.
 * L'annotaion sul metodo ha precedenza rispetto alla classe
 * @author edoardo
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD, ElementType.TYPE })
public @interface AOPLogger {

	public enum LoggerLevel {
		DEBUG, INFO, WARN, ERROR, TRACE, FATAL
	}

	public enum LoggerWhen {
		ON_ENTER, ON_EXIT, ON_RETURN, ANY, PARAMS;
	}

	String[] name();

	LoggerLevel[] loggerLevel() default { LoggerLevel.DEBUG,LoggerLevel.INFO };

	LoggerLevel[] exceptionLoggerLevel() default { LoggerLevel.INFO };

	LoggerWhen[] loggerWhen() default { LoggerWhen.ANY };

}
